package com.cskaoyan.javase.network._2tcp._v5;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务端
 * 客户端上传文件到服务端
 *
 * 在服务端中文件数据的流向是什么?
 * 首先从客户端中获取传输的文件数据,这个过程依赖于Socket对象的输入流
 * -->
 * 读到服务端的进程中,byte数组装数组
 * -->
 * 把数据写到本地文件中
 *
 * @since 16:31
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9999);
        Socket socket = serverSocket.accept();
        // 获取Socket对象输入流
        InputStream in = socket.getInputStream();
        // 创建字节文件输出流
        FileOutputStream out = new FileOutputStream("E:\\1\\服务端文件夹\\学习资料.mp4");
        // 循环读,循环写
        byte[] buf = new byte[1024];
        int readCount;
        while ((readCount = in.read(buf)) != -1) {
            out.write(buf, 0, readCount);
        }
        System.out.println("循环已完成,文件已经下载到服务器!");
        // 服务端完成了文件复制,也就意味着客户端上传文件成功了,于是服务端反馈一下
        // 告诉客户端文件上传成功
        // 这时需要依赖于Socket对象的输出流,向客户端发送消息
        OutputStream out2 = socket.getOutputStream();
        out2.write("文件上传已成功!我已受到你的文件!".getBytes());

        out2.close();
        in.close();
        out.close();

    }
}
